/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor. 
 */

package com.ventas.dao;
import com.ventas.bean.Categoria;
import com.ventas.bean.Producto;
import com.ventas.service.ProductoInterfaz;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author jesus
 */
public class ProductoDao implements ProductoInterfaz{

    @Override
    public List getProductoListaRango(int de, int hasta) throws Exception {
          Connection cn =null;
        CallableStatement cstm= null;
        ResultSet rst = null;
        List<Producto> lstProducto= null;
        
        try {
            cn = Conexion.getConexion();
            cstm = cn.prepareCall("call getProductoLista(?,?)");
            cstm.setInt(1, de);
            cstm.setInt(2, hasta);
            rst=cstm.executeQuery();
            lstProducto = new ArrayList<>();
            while (rst.next()) {                
                Producto producto = new Producto();
                producto.setPro_id(rst.getInt(1));
                producto.setPro_nombre(rst.getString(2));
                    Categoria categoria = new Categoria();
                    categoria.setCat_descripcion(rst.getString(3));
                producto.setPro_precio(rst.getDouble(4));
                producto.setStock(rst.getInt(5));
                producto.setPro_estado(rst.getInt(6));                    
                producto.setCategoria(categoria);
                lstProducto.add(producto);                        
            }            
                    
        } catch (Exception e) {
            System.out.println("Error Lista lenguaje"+e.getMessage());
        }finally{
            rst.close();
            cstm.close();
            cn.close();
        }
        return  lstProducto;
    }

    @Override
    public int getCantidaProductos() throws Exception {
        int count = 0;
        Connection cn = null;
        try {
            cn = Conexion.getConexion();
            String sql = "select count(*) from producto";
            CallableStatement cstm = cn.prepareCall(sql);
            ResultSet rs = cstm.executeQuery();
            while (rs.next()) {
                count = rs.getInt(1);
            }
            System.out.println("Exito getCantidaProductos");
        } catch (Exception e) {
            System.out.println("Error getCantidaProductos" + e.getMessage());
            e.printStackTrace();
        }
        return count;
    }

    @Override
    public List getProductoListaChar() throws Exception {
       Connection cn =null;
        CallableStatement cstm= null;
        ResultSet rst = null;
        List<Producto> lstLenguaje= null;        
        
        int contador=0;
        try {
            cn = Conexion.getConexion();
            cstm = cn.prepareCall("call spProductoChar()");
            rst=cstm.executeQuery();
            lstLenguaje = new ArrayList<>();
            while (rst.next()) {                
                Producto lenguaje = new Producto();
                lenguaje.setPro_nombre(rst.getString(1));
                lenguaje.setVentas(rst.getInt(2));
                lstLenguaje.add(lenguaje);
                lenguaje.setContador(contador);             
                contador+=2;
            }            
                    
        } catch (Exception e) {
            System.out.println("Error Lista lenguaje chart"+e.getMessage());
        }
        return  lstLenguaje;
    }

    @Override
    public boolean IngresoProductoDao(Producto producto) throws Exception {
        Connection con=null;
        CallableStatement cstm=null;
        boolean resultado=false;
        try {
            con=Conexion.getConexion();
            String sql="call pa_ingresoproductos(?,?,?,?);";
            cstm=con.prepareCall(sql);
            
            cstm.setString(1,producto.getPro_nombre());
            cstm.setString(2,producto.getPro_descripcion());
            cstm.setDouble(3,producto.getPro_precio());        
            cstm.setInt(4,producto.getCategoria().getCat_id());
            System.out.println();
            //tu sp esta mal , esta bien , el estado lo puse automaticoo! 
            cstm.execute();
            resultado=true;
        } 
        catch (Exception e) {
            resultado=false;
            System.out.println("Error de Ingreso"+e.getMessage());
            e.printStackTrace();
        }
        return resultado;
        
    }

    @Override
    public List listadoProductosActivos() throws Exception {
         List listadoProductos = new ArrayList();
      Connection con = null;
      CallableStatement cstm = null ;
      ResultSet rs = null;
      
     
      
      try{
          con = Conexion.getConexion();
                  
          String sql = "call pa_listadoProductos()";
          cstm=con.prepareCall(sql);
          rs = cstm.executeQuery();
          while(rs.next()){
              
             Producto producto = new Producto();
             producto.setPro_id(rs.getInt(1));
             producto.setPro_nombre(rs.getString(2));
              producto.setPro_descripcion(rs.getString(3));
               producto.setPro_precio(rs.getDouble(4));
               Categoria categoria = new Categoria();
               categoria.setCat_descripcion(rs.getString(5));
               producto.setCategoria(categoria);
               
             
              listadoProductos.add(producto);
              
             
              
          }
          System.out.println("Exito carga listadoProductoChartDao");
      }catch(Exception e ){
          System.out.println("Error carga listadoProductoChartDao" + e.getMessage());
          e.printStackTrace();
          
      }finally{
      
          rs.close();
          cstm.close();
          con.close();
          
      }
      return listadoProductos;
    }

    @Override
    public List listadoProductosMasVendidos() throws Exception {
        List chartProductosVendidos = new ArrayList();
      Connection con = null;
      CallableStatement cstm = null ;
      ResultSet rs = null;
      int contador=0;
      
     
      
      try{
          con = Conexion.getConexion();
                  
          String sql = "call pa_ProductosMasVendidos()";
          cstm=con.prepareCall(sql);
          rs = cstm.executeQuery();
          while(rs.next()){
              
             Producto producto = new Producto();
             producto.setContador(contador);
             producto.setPro_id(rs.getInt(1));
             producto.setPro_nombre(rs.getString(2));
              producto.setCantidad(rs.getInt(3));
               
             
              chartProductosVendidos.add(producto);
              
              contador+=2;
             
               }
          System.out.println("Exito carga listadoProductoChartDao");
      }catch(Exception e ){
          System.out.println("Error carga listadoProductoChartDao" + e.getMessage());
          e.printStackTrace();
          
      }finally{
      
          rs.close();
          cstm.close();
          con.close();
          
      }
      return chartProductosVendidos; 
    }
    }


    
    

